﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ForrajeriaDAL;
using ForrajeriaDB;
using System.Transactions;
using System.Data;

namespace ForrajeriaBCL
{
    public class PedidoClienteBCL : InterfaceBCL<PedidoClienteMO>
    {
        private PedidoClienteDAL pedidoClienteDAL;
        private DetallePedidoClienteDAL detallePedidoClienteDAL;
        private DetallePedidoClienteMO detallePedidoClienteMO = new DetallePedidoClienteMO();
        

        public PedidoClienteBCL()
        {
            pedidoClienteDAL = PedidoClienteDAL.getInstance;//Llamada al Singleton
            detallePedidoClienteDAL = DetallePedidoClienteDAL.getInstance;
        }

        public string adicionar(PedidoClienteMO objPed, DataTable dt)
        {   
           
           
            try
            {

                using (TransactionScope tra = new TransactionScope())
                {
                    int numPed = pedidoClienteDAL.AdicionarRetorno(objPed);
                    int cont = 1;
                    foreach (DataRow dr in dt.Rows)
                    {
                        detallePedidoClienteMO.Cantidad = int.Parse(dr["cantidad"].ToString());
                        detallePedidoClienteMO.CodigoForraje = int.Parse(dr["codigoForraje"].ToString());
                        detallePedidoClienteMO.NroDetalle = cont;
                        cont++;
                        detallePedidoClienteMO.Precio = double.Parse(dr["precioTotal"].ToString());
                        detallePedidoClienteMO.NroPedidos = numPed;
                        detallePedidoClienteDAL.Adicionar(detallePedidoClienteMO);
                        
                    }
                    tra.Complete();
                 
                }
                return "1";
            }
            catch 
            {
                return "Error Al modificar el Forraje";
            }

        }

        public DataTable obtenerDetalle(int nroPedido)
        {
            try
            {
                DataTable dt = pedidoClienteDAL.obtenerDetalle(nroPedido);
                return dt;

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public List<PedidoClienteMO> getByCliente(int cliente=0, string estado="")
        {
            try
            {
                return pedidoClienteDAL.getbyClientIDxEstado(cliente,estado);
            }
            catch 
            {
                throw new Exception("Error de Lectura en Base de Datos");
            }

           
        }

        
        public List<DetallePedidoClienteMO> getDetallebyPedidoID(int idPedido)
        {
            try
            {
                return detallePedidoClienteDAL.getByNroPedido(idPedido);
            }
            catch
            {
                throw new Exception("Error de Lectura en Base de Datos");
            }

        }


        public DataTable ReportePedidos(string fechaInicio = "",string fechaFin ="",string estado="0", string columna= "", string dire = "")
        {
            try
            {
                return pedidoClienteDAL.ReportePedidos(fechaInicio, fechaFin, estado, columna, dire);
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }


        public DataTable DetalleReporte(int nro)
        {
            try
            {
                return detallePedidoClienteDAL.DetalleReporte(nro);

            }
            catch (Exception ex)
            {
                throw ex;
            }


        }
#region Interfaz

        public List<PedidoClienteMO> GetAll()
        {
            throw new NotImplementedException();
        }

        public string Adicionar(PedidoClienteMO item)
        {
            throw new NotImplementedException();
        }

        public string Eliminar(PedidoClienteMO item)
        {
            throw new NotImplementedException();
        }

        public string Actualizar(PedidoClienteMO itemNuevo, PedidoClienteMO itemViejo)
        {
            try
            {
                pedidoClienteDAL.Actualizar(itemNuevo, itemViejo);
                return "El pedido se Actualizo Correctamente";

            }
            catch(Exception ex)
            {
                throw ex;
            }
        }
#endregion
    }
}
